V1 - Examples - Total Bytes Used
Total Bytes
function totalbytes()
search {from="-30d<d", to="-20d>d"} sContent("@source","surf-soho-6ccb")
let sent=f("@fields.bytes_sent"),recvd=f("@fields.bytes_recvd"),session=f("@fields.session_state")
let sent2=parseInt(sent),recvd2=parseInt(recvd)
where session=="END"
aggregate s=sum(sent2+recvd2)
end
stream totalbytes = totalbytes()
The total bytes used is 19347219046 bytes, equal to ~18 GB.
In this case, there are two variables, "@fields.bytes_sent" and "@fields.bytes_recvd", indicate the bytes sent and received, respectively. However, the bytes are stored in a format of string. Then it's necessary to convert them into integers before calculation, using parseInt. The last step is using aggregate (without by) to get the total bytes.
Related FPL command: search;sContent;let;f;parseInt;where;aggregate;stream
Total Bytes per Hour
function totalbytes_per_hour()
search {from="-30d<d", to="-20d>d"} sContent("@source","surf-soho-6ccb")
let sent=f("@fields.bytes_sent"),recvd=f("@fields.bytes_recvd"),session=f("@fields.session_state"),timestamp=f("@timestamp")
let sent2=parseInt(sent),recvd2=parseInt(recvd)
where session=="END"
let Hour=strftime("%D:%H:%M",timebucket("1h",timestamp))
aggregate s=sum(sent2+recvd2) by Hour
end
stream totalbytes_per_hour = totalbytes_per_hour()

If you want to calculate the total bytes per hour, what you should do first is to divide the timestamp into a interval of 1h using strftime and timebucket("Hour"). Then, compared to the last example, a by is needed in the aggregate command, which means aggregating by "Hour".
Related FPL command: search;sContent;let;f;parseInt;where;strftime;timebucket;aggregate;stream